package controller

import (
	"github.com/gin-gonic/gin"
	"gormstu/model"
	"net/http"
)

type navField struct {
	Id    int    `json:"id"`
	Title string `json:"title"`
}

func (f navField) TableName() string {
	return "nav"
}

type NavController struct {
}

func (nav NavController) SearchAll(ctx *gin.Context) {
	var navList []model.Nav
	model.DB.Find(&navList)

	ctx.JSON(http.StatusOK, gin.H{
		"data": navList,
		"code": 0,
		"msg":  "success",
	})
}

// SearchOne Where用法
func (nav NavController) SearchOne(ctx *gin.Context) {
	//  >  查询 id > 1 的数据
	var up []model.Nav
	model.DB.Where("id > ?", 1).Find(&up)

	// 查询 1 < id < 3 的数据
	var middle []model.Nav
	model.DB.Where("id > ? and id < ?", 1, 3).Find(&middle)

	// 查询 id = 3 , 5, 6 的数据
	var among []model.Nav
	model.DB.Where("id in (?)", []int{1, 2}).Find(&among)

	// 模糊查询 url 包含 .com 的数据
	var opaque []model.Nav
	model.DB.Where("url like  ?", "%.com").Find(&opaque)

	// between and 查询 id < 3 , id > 1的数据
	var between []model.Nav
	model.DB.Where("id between ? and ?", 1, 3).Find(&between)

	//  and 不在赘述  ==>   model.DB.Where("id > ? and id < ?", 1, 3).Find(&between)
	//  or  不在赘述  ==>   model.DB.Where("id > ? or id < ?", 1, 3).Find(&between)

	// 指定查询字段 ==> 会讲其余字段置为默认值, 如果想仅要某些字段，需要重设结构体 ==> 详见 line 9 结构体
	var field []navField
	model.DB.Select("id , title").Find(&field)

	// order
	var Order []model.Nav
	model.DB.Order("id desc").Find(&Order)

	// limit
	var Page []model.Nav
	model.DB.Limit(1).Find(&Page)

	// limit 结合 offset 实现分页
	var fenye []model.Nav
	// 最后查询
	model.DB.Limit(1).Offset(1).Find(&fenye)

	// count
	var statistics model.Nav
	var all int64
	model.DB.Find(&statistics).Count(&all)

	// 原生语句执行 ==> 查询语句的话 在 exec 后追加一个 .scan方法 ==> Exec(sql语句).scan(切片)
	model.DB.Exec("insert into nav (title, url,status, sort) values (?, ?, ?, ?)", "test", "test", 4, 4)
	ctx.JSON(http.StatusOK, gin.H{
		"between and ":       between,
		" url 包含 .com 的数据":   opaque,
		"id > 1 的数据":         up,
		"1 < id < 3 的数据":     middle,
		" id = 3 , 5, 6 的数据": among,
		"指定 id, title 字段":    field,
		"order":              Order,
		"限制 1 条":             Page,
		"分页第二页":              fenye,
		"总计":                 all,
	})
}
